package com.dkm.ec.sale.domain;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;

import com.dkm.base.api.service.IdGenerator;
import com.dkm.base.core.helper.SpringHelper;
import com.dkm.biz.domain.AbstractDomain;
import com.dkm.ec.sale.persistence.dao.SaleSkuGroupDao;
import com.dkm.ec.sale.persistence.entity.SaleSkuGroupPo;

/**
 * 对象功能:销售产品SKU自定义组 领域对象实体
 * 开发公司:SKG.COM
 * 开发人员:HJD
 * 创建时间:2015-07-08 17:38:34
 */
@SuppressWarnings("serial")
@Service
@Scope("prototype")
public class SaleSkuGroup extends AbstractDomain<String, SaleSkuGroupPo>{
	 
	 private SaleSkuGroupDao saleSkuGroupDao = null;
	 
	 private IdGenerator idGenerator = SpringHelper.getBean(IdGenerator.class);

	protected void init(){
		saleSkuGroupDao = SpringHelper.getBean(SaleSkuGroupDao.class);
		setDao(saleSkuGroupDao);
	}	 
	
	public void deleteGroup(String group){
		saleSkuGroupDao.deleteGroupByGroupKey(group);
	}
	

	/**
	 * 领域对象的save方法，保存saleSkuGroup前，先根据传递过来的skuIds，删除saleSkuGroup，再保存,同一组避免存在重复的sku
	 * @param skuIds 传递的参数类型："1231234,234bad,234,"
	 */
	public void save(Map<String, String> para){
		String skuIds = para.get("skuIds");
		String groupKey = para.get("groupKey");
		if(!"".equals(skuIds)){
			Map<String,Object> skuGroupMap = new HashMap<String,Object>();  //构建删除map
			List<SaleSkuGroupPo> skuGroupPos = new ArrayList<SaleSkuGroupPo>(); //构建插入list
			String[] skuIdArray = skuIds.split(",");
			List<String> skuIdList = new ArrayList<String>();
			for(String skuId: skuIdArray){
				skuIdList.add(skuId);
				SaleSkuGroupPo saleSkuGroupPo = new SaleSkuGroupPo();
				saleSkuGroupPo.setId(idGenerator.genSid());
				saleSkuGroupPo.setGroup(groupKey);
				saleSkuGroupPo.setSkuId(skuId);
				skuGroupPos.add(saleSkuGroupPo);
			}
			skuGroupMap.put("groupKey", groupKey);
			skuGroupMap.put("skuIdList", skuIdList);
			saleSkuGroupDao.deleteBySkuIds(skuGroupMap);//删除
			saleSkuGroupDao.insertBatch(skuGroupPos); // 插入
		}
	}
	
	/**
	 * 领域对象edit方法
	 * ///修改时，删除该组下所有的记录（这种做法逻辑上还是不合理的）-(其实，改组只有移除和增加,不需要该方法)
	 * @param para
	 */
	public void edit(Map<String, String> para){
		String skuIds = para.get("skuIds");
		String groupKey = para.get("groupKey");
		List<SaleSkuGroupPo> skuGroupPos = new ArrayList<SaleSkuGroupPo>(); //构建插入list
		deleteGroup(groupKey);
		if(!"".equals(skuIds)){
			String[] skuIdArray = skuIds.split(",");
			for(String skuId : skuIdArray){
				SaleSkuGroupPo saleSkuGroupPo = new SaleSkuGroupPo();
				saleSkuGroupPo.setId(idGenerator.genSid());
				saleSkuGroupPo.setGroup(groupKey);
				saleSkuGroupPo.setSkuId(skuId);
				skuGroupPos.add(saleSkuGroupPo);
			}
			saleSkuGroupDao.insertBatch(skuGroupPos); // 插入
		}
	}
	 
}
